package model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Formula;

@Entity
@Table(name = "ACAO")
@XmlRootElement
public class Acao implements java.io.Serializable {

    private long acaoCodigo;
    private String acaoDescricao;
    private Boolean acaoAtivo;
    private AcaoGrupo acaoGrupo;
    /**
     * Formula
     */
    private String agrNome;
    private String acaoAtivoDesc;

    public Acao() {
    }

    public Acao(long acaoCodigo) {
        this.acaoCodigo = acaoCodigo;
    }

    public Acao(long acaoCodigo, String acaoDescricao) {
        this.acaoCodigo = acaoCodigo;
        this.acaoDescricao = acaoDescricao;
    }

    @Id
    @SequenceGenerator(name = "seqAcao", sequenceName = "SEQ_ACAO")
    @Column(name = "ACAO_CODIGO", unique = true, nullable = false, precision = 10, scale = 0)
    public long getAcaoCodigo() {
        return this.acaoCodigo;
    }

    public void setAcaoCodigo(long acaoCodigo) {
        this.acaoCodigo = acaoCodigo;
    }

    @Column(name = "ACAO_DESCRICAO", length = 100)
    public String getAcaoDescricao() {
        return this.acaoDescricao;
    }

    public void setAcaoDescricao(String acaoDescricao) {
        this.acaoDescricao = acaoDescricao;
    }

    @Column(name = "ACAO_ATIVO", length = 1)
    public Boolean getAcaoAtivo() {
        return acaoAtivo;
    }

    public void setAcaoAtivo(Boolean acaoAtivo) {
        this.acaoAtivo = acaoAtivo;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "AGR_CODIGO")
    public AcaoGrupo getAcaoGrupo() {
        return acaoGrupo;
    }

    public void setAcaoGrupo(AcaoGrupo acaoGrupo) {
        this.acaoGrupo = acaoGrupo;
    }

    @Formula("(SELECT AGR.AGR_NOME "
            + "  FROM ACAO_GRUPO AGR"
            + " WHERE AGR.AGR_CODIGO = AGR_CODIGO)")
    public String getAgrNome() {
        return agrNome;
    }

    public void setAgrNome(String agrNome) {
        this.agrNome = agrNome;
    }

    @Formula("(CASE WHEN ACAO_ATIVO = 1 THEN 'Sim' ELSE 'Não' END)")
    public String getAcaoAtivoDesc() {
        return acaoAtivoDesc;
    }

    public void setAcaoAtivoDesc(String acaoAtivoDesc) {
        this.acaoAtivoDesc = acaoAtivoDesc;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 71 * hash + (int) (this.acaoCodigo ^ (this.acaoCodigo >>> 32));
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Acao other = (Acao) obj;
        if (this.acaoCodigo != other.acaoCodigo) {
            return false;
        }
        return true;
    }
}
